<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function test(a,b){
            console.log(this,a,b);
        }
        // test(10,20);

        var obj = {
            name:"obj",
            run:function(){
                console.log(this);
            }
        }
        // obj.run();

        // 
        var arr = "aaaa";
        //函数名称.call()
        // 参数1是要更改的新的this指向
        // 从参数2开始 对应形参列表
        // test.call(arr,10,20);

        // 函数名称.apply()
        // 参数1是要更改的新的this指向
        // 参数2是个数组 数组内是函数本身的参数列表
        // test.apply(arr,[10,20]);


        //函数名称.bind()
        // 参数1是要更改的新的this指向
        // 从参数2开始 对应形参列表
        // bind()不会直接调用函数 会返回一个更改this后的新的函数
        // var a = test.bind(arr,10,20);
        // console.log(a);
        // a();
        test.bind(arr,10,20)();
    </script>
</body>
</html>